package com.java.yz.day05.homework;
/*
4.二分法查找操作：使用二分法查找有序数组中元素。找到返回索引，不存在输出-1。
    分析：二分法查找的前提是数组有序。
    假如有一组数为3，12，24，36，55，68，75，88要查给定的值24.可设三个变量
    front，mid，end分别指向数据的上界，中间和下界，mid=（front+end）/2.
    1)开始令front=0（指向3），end=7（指向88），则mid=3（指向36）。因为mid>x， 故应在前半段中查找。
    2)令新的end=mid-1=2，而front=0不变，则新的mid=1。此时x>mid，故确定应  在后半段中查找。
    3)令新的front=mid+1=2，而end=2不变，则新mid=2，此时a[mid]=x，查找成功。
    如要查找的数不是数列中的数，例如x=25，当第三次判断时，x>a[mid]，
    按以上规律，令front=mid+1，即front=3，出现front>end的情况，表示查找不成功。
 */
import java.util.Scanner;
public class Text3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要查找的目标元素：");
        int num=sc.nextInt();
        int[] array={3,12,24,36,55,68,75,88};
        int front=0;
        int end= array.length-1;  //7
        int mid=(front+end)/2;  //3

        //由于不知道要找多少次，所以要采用while循环
        boolean flag =true;
        while (front<=end){
            if (num>array[mid]){   //24>3
                front=mid+1;            //front=4
                mid=(front+end)/2;      //mid=5
            }
            else if (num<array[mid]) {
                end=mid-1;
                mid=(front+end)/2;
            }
            else {
                System.out.println("目标元素下标为："+mid);
                flag=false;
                break;
            }
        }
        if (flag){
            System.out.println("-1");
        }
    }
}
